From: Lionel Landwerlin Date: Tue, 7 May 2013 22:35:27 +0000 (+0100) Subject: st-shadow: Fix offset shadow offscreen rendering X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~4224 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=d6fe008b2c334f8f7b48b28b87982c06035243e0;p=gnome-shell.git st-shadow: Fix offset shadow offscreen rendering The shadows are currently rendered by painting the actor we want to apply shadow on, in an offscreen buffer. The problem is that when this actor has an allocation padding (ie allocation that isn't at 0x0 relatively to its parent), this padding is added within the offscreen buffer and as a result the shadow rendering is truncated because the offscreen buffer size is the size of the allocation box, not the allocation box + padding. This patch reposition the actor at 0x0 with rendering it by changing the initial transformation matrix when rendering the actor offscreen. https://bugzilla.gnome.org/show_bug.cgi?id=698301 --- diff --git a/src/st/st-icon.c b/src/st/st-icon.c index 3fec7e2a2..fac474af9 100644 --- a/src/st/st-icon.c +++ b/src/st/st-icon.c @@ -249,11 +249,6 @@ st_icon_paint (ClutterActor *actor) clutter_actor_get_allocation_box (priv->icon_texture, &allocation); clutter_actor_box_get_size (&allocation, &width, &height); - allocation.x1 = (width - priv->shadow_width) / 2; - allocation.y1 = (height - priv->shadow_height) / 2; - allocation.x2 = allocation.x1 + priv->shadow_width; - allocation.y2 = allocation.y1 + priv->shadow_height; - _st_paint_shadow_with_opacity (priv->shadow_spec, priv->shadow_material, &allocation, diff --git a/src/st/st-label.c b/src/st/st-label.c index 4954d4937..9833b8337 100644 --- a/src/st/st-label.c +++ b/src/st/st-label.c @@ -218,10 +218,6 @@ st_label_paint (ClutterActor *actor) clutter_actor_get_allocation_box (priv->label, &allocation); clutter_actor_box_get_size (&allocation, &width, &height); - allocation.x1 = allocation.y1 = 0; - allocation.x2 = width; - allocation.y2 = height; - if (priv->text_shadow_material == COGL_INVALID_HANDLE || width != priv->shadow_width || height != priv->shadow_height) diff --git a/src/st/st-private.c b/src/st/st-private.c index 793202b78..45e909624 100644 --- a/src/st/st-private.c +++ b/src/st/st-private.c @@ -511,6 +511,7 @@ _st_create_shadow_material_from_actor (StShadow *shadow_spec, cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0); cogl_push_framebuffer (offscreen); cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR); + cogl_translate (-box.x1, -box.y1, 0); cogl_ortho (0, width, height, 0, 0, 1.0); clutter_actor_paint (actor); cogl_pop_framebuffer (); diff --git a/src/st/st-shadow.c b/src/st/st-shadow.c index df1787f99..4a2ff001d 100644 --- a/src/st/st-shadow.c +++ b/src/st/st-shadow.c @@ -292,11 +292,6 @@ st_shadow_helper_paint (StShadowHelper *helper, clutter_actor_box_get_size (actor_box, &width, &height); - allocation.x1 = (width - helper->width) / 2; - allocation.y1 = (height - helper->height) / 2; - allocation.x2 = allocation.x1 + helper->width; - allocation.y2 = allocation.y1 + helper->height; - _st_paint_shadow_with_opacity (helper->shadow, helper->material, &allocation,